package com.boot.ys.mybatisplus.Test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * Java实现修改文件夹及其所有子文件夹和文件的日期
 * <p>
 * 修改文件夹日期
 *
 * @author: 杨升
 * @date: 2025-10-01 20:36
 * @Version 1.0
 */

public class FolderDateModifier {

    public static void main(String[] args) {
        // 固定的文件夹路径
        String folderPath = "E:\\BaiduNetdiskDownload\\008springboot家庭财务管理系统";

        // 固定的日期时间（格式：yyyy-MM-dd HH:mm）
        String dateTimeStr = "2025-10-01 14:30";

        try {
            // 解析日期时间
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
            LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
            FileTime newFileTime = FileTime.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

            // 修改文件夹及其子文件夹和文件的日期
            modifyAllDates(folderPath, newFileTime);

            System.out.println("文件夹和文件日期修改完成！");
        } catch (Exception e) {
            System.err.println("发生错误：" + e.getMessage());
            e.printStackTrace();
        }
    }

    private static void modifyAllDates(String folderPath, FileTime newFileTime) throws IOException {
        Path startPath = Paths.get(folderPath);

        // 使用Files.walk遍历所有文件和文件夹
        Files.walk(startPath)
                .forEach(path -> {
                    try {
                        // 设置文件或文件夹的最后修改时间
                        Files.setLastModifiedTime(path, newFileTime);
                        System.out.println("已修改: " + path);
                    } catch (IOException e) {
                        System.err.println("无法修改 " + path + ": " + e.getMessage());
                    }
                });
    }

}
